package dao

import (
	"gitee.com/gopher2011/mbt"
	_ "github.com/go-sql-driver/mysql"
	"sync"
)

var (
	Once   sync.Once   // 这个对象可以全局使用。
	engine *mbt.Engine // 这个对象只能在dao层使用。
)

type Page struct {
	PageNum  int `json:"page_num" form:"page_num"`
	PageSize int `json:"page_size" form:"page_size"`
}

const (
	MaxOpenConn = 10
	MaxIdleConn = 5
	DSN         = "root:root@tcp(127.0.0.1:3306)/small?charset=utf8mb4&parseTime=True&loc=Local"
	DriverName  = "mysql"
)

func init() {
	Once.Do(
		func() {
			cfg := &mbt.Config{
				DriverName:  DriverName,
				DSN:         DSN,
				MaxIdleConn: MaxIdleConn,
				MaxOpenConn: MaxOpenConn,
			}
			engine = mbt.New(cfg)
			h := Init()
			g := engine.FilePath("./app/dao").H(h)
			g.Run()
		},
	)
}
func Init() map[interface{}]interface{} {
	h := mbt.H{
		&AddressDao:            &Address{},            // 收货地址表
		&AdminDao:              &Admin{},              // 管理员表
		&AdvertiseDao:          &Advertise{},          // 广告表
		&AfterSaleDao:          &AfterSale{},          // 售后表
		&BrandDao:              &Brand{},              // 品牌商表
		&CartDao:               &Cart{},               // 购物车商品表
		&CategoryDao:           &Category{},           // 类目表
		&CollectDao:            &Collect{},            // 收藏表
		&CommentDao:            &Comment{},            // 评论表
		&CouponDao:             &Coupon{},             // 优惠券信息及规则表
		&CouponUserDao:         &CouponUser{},         // 优惠券用户使用表
		&FeedbackDao:           &Feedback{},           // 意见反馈表
		&FootprintDao:          &Footprint{},          // 用户浏览足迹表
		&GoodsDao:              &Goods{},              // 商品基本信息表
		&GoodsAttributeDao:     &GoodsAttribute{},     // 商品参数表
		&GoodsProductDao:       &GoodsProduct{},       // 商品货品表
		&GoodsSpecificationDao: &GoodsSpecification{}, // 商品规格表
		&GrouponDao:            &Groupon{},            // 团购活动表
		&GrouponRulesDao:       &GrouponRules{},       // 团购规则表
		&IssueDao:              &Issue{},              // 常见问题表
		&KeywordDao:            &Keyword{},            // 关键字表
		&LogDao:                &Log{},                // 操作日志表
		&NoticeDao:             &Notice{},             // 通知表
		&NoticeAdminDao:        &NoticeAdmin{},        // 通知管理员表
		&OrderDao:              &Order{},              // 订单表
		&OrderGoodsDao:         &OrderGoods{},         // 订单商品表
		&PermissionDao:         &Permission{},         // 权限表
		&RegionDao:             &Region{},             // 行政区域表
		&RoleDao:               &Role{},               // 角色表
		&SearchHistoryDao:      &SearchHistory{},      // 搜索历史表
		&StorageDao:            &Storage{},            // 文件存储表
		&SystemDao:             &System{},             // 系统配置表
		&TopicDao:              &Topic{},              // 专题表
		&UserDao:               &User{},               // 用户表
	}
	return h
}
